package com.wyl.java.juc_.cyclicbarrier_;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

/**
 * CyclicBarrier类允许一组线程相互等待，直到所有线程都达到某个屏障点后再同时继续执行
 * 然后常用方法有await
 *
 * @author 吴宇亮 on 2023/3/28 14:35
 */
public class CyclicBarrier01 {

    public static void main(String[] args) {
        CyclicBarrier cyclicBarrier = new CyclicBarrier(2);
        Thread task1 = new Thread(){
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                try {
                    // 到达了这里表示该任务做完了，如果其他任务也做完了，则直接继续下面的；否则等待其他任务完成
                    cyclicBarrier.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
                System.out.println("我是任务一");
            }
        };
        Thread task2 = new Thread(){
            @Override
            public void run() {
                try {
                    // 到达了这里表示该任务做完了，如果其他任务也做完了，则直接继续下面的；否则等待其他任务完成
                    cyclicBarrier.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
                System.out.println("我是任务二");
            }
        };

        task1.start();
        task2.start();
    }

}
